
function ajax (url) {
    return new Promise(function (resolve, reject) {
        var xhr = new XMLHttpRequest()
        xhr.open('GET', url)
        xhr.responseType = 'json'
        xhr.onload = function () {
            if (this.status === 200) {
                resolve(this.response)
            } else {
                reject(new Error(this.statusText))
            }
        }
        xhr.send()
    })
}

async function main() {
    try {
        const users = await ajax('/api/users.json')
        console.log(users)
        const posts = await ajax('/api/posts.json')
        console.log(posts)
        const urls = await ajax('/api/urls1.json')
        console.log(urls)
    } catch(e) {
        console.log(e)
    }

}

// const promise = main()
// promise.then(() => {
//     console.log('all completed')
// })


// 随堂测试
//  1 3 5
// 2 4

const promise = new Promise((resolve, reject) => {
    console.log(1)
    resolve()
    console.log(2)
})
promise.then(() => {
    console.log(3)
})
console.log(4)

// 1 2
// 验证
Promise.resolve(1)
    .then((res) => {
        console.log(res)
        return 2
    })
    .catch((err) => {
        return 3
    })
    .then((res) => {
        console.log(res)
    })

// then： success 1
// 验证
const promiseA = new Promise((resolve, reject) => {
    resolve('success1')
    reject('error')
    resolve('success2')
})

promiseA
    .then((res) => {
        console.log('then', res)
    })
    .catch((err) => {
        console.log('catch', err)
    })

// 原式
Promise
    .resolve(1)
    .then(2)
    .then(Promise.resolve(3))
    .then(console.log)

// 拆分
const promiseB = new Promise((resolve, reject) => {
    resolve(1)
})
promiseB
    .then((res) => res)  // 原式子 then参数为2 不是函数  内部被替换成  res => res
    .then((res) => res)  // 原式子 then参数为  Promise.resolve(3) 也是一个结果参数是一个对象  非函数  内部被替换成  res => res
    .then((res) => console.log(res)) // 原式子  then参数为  console.log   console.log  是一个函数方法  直接以console.log 调用返回值

console.log(typeof Promise.resolve(3))

Promise
    .resolve(1)
    .then(2)
    .then(Promise.resolve(3))
    .then(fn)

    function fn(res) {
        console.log('res',res)
    }